#include <allegro.h>
#include "plataforma.h"
#include "nelib.h"

plataforma::plataforma(int x, int y, int w, int h, int vel_x, int vel_y, int dx, int dy, char *file) : elemento(x, y, w, h) {
	this->x0 = this->x;
	this->y0 = this->y;
	this->vel_x = vel_x;
	this->vel_y = vel_y;
	this->dx = dx;
	this->dy = dy;
	if (dx >= 0)
		this->dir_x = 1;
	else
		this->dir_x = -1;
	if (dy >= 0)
		this->dir_y = 1;
	else
		this->dir_y = -1;
	
	char temp_bmp_name[150];
	char temp_att_name[150];
	
	FILE *pplataforma = fopen(file, "r");
	if (pplataforma != NULL) {
		fscanf(pplataforma, "%s", temp_bmp_name);
		this->img = new imagem(this->x, this->y, temp_bmp_name);

		while (!feof(pplataforma)) {
			fscanf(pplataforma, "%s", temp_att_name);
			if (feof(pplataforma))
				break;
			this->stats[temp_att_name] = true;
		}
	}
	else
	printf("Erro em carregar plataforma %s", file);
	fclose(pplataforma);
}

void plataforma::move() {

	x +=  vel_x * dir_x;
	if (nat(x - x0) >= nat(dx) || x <= x0)
		dir_x *= -1;

	y += vel_y * dir_y;
	if (nat(y - y0) >= nat(dy) || y <= y0) 
		dir_y *= -1;
		
	this->img->x = this->x;
	this->img->y = this->y;
}

void plataforma::draw(BITMAP *buffer, int fx, int fy, int fw, int fh) {
	int dx = 0, dy = 0;
	while(dy < h) {
		::draw(buffer, img->bmp, (x + dx), (y + dy), fx, fy, min(img->w, w - dx), min(img->h, h - dy), fw, fh);
		dx += min (img->w, w - dx);
		if (dx == w) {
			dx = 0;
			dy += min(img->h, h - dy);
		}
	}
}
